// import com.alibaba.druid.sql.ast.SQLExpr_ptr;
// import com.alibaba.druid.sql.ast.SQLName_ptr;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"

class SQLOptimizeStatement : virtual public SQLStatementImpl
{
public:
  SQLExprTableSource_list_ptr tableSources;
  SQLName_ptr cluster;

  BOOL_ptr isFinal_;
  BOOL_ptr deduplicate;
  SQLExpr_ptr deduplicateBy;

  SQLOptimizeStatement();
  SHAREDOBJECT(SQLOptimizeStatement);

  BOOL_ptr isFinal();

  void setFinal(BOOL_ptr isFinal);

  BOOL_ptr isDeduplicate();

  void setDeduplicate(BOOL_ptr deduplicate);

  SQLExpr_ptr getDeduplicateBy();

  void setDeduplicateBy(SQLExpr_ptr deduplicateBy);

  SQLExprTableSource_list_ptr getTableSources();

  void addTableSource(SQLExprTableSource_ptr tableSource);

  SQLName_ptr getCluster();

  void setCluster(SQLName_ptr cluster);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);
};
